package vip.aster.workflow.service;

import com.baomidou.mybatisplus.extension.service.IService;
import vip.aster.common.utils.PageInfo;
import vip.aster.workflow.dto.FormItem;
import vip.aster.workflow.entity.WfForm;
import vip.aster.workflow.query.WfFormQuery;
import vip.aster.workflow.vo.WfFormVO;

import java.util.List;

/**
 * <p>
 * 流程表单 服务接口
 * </P>
 *
 * @author Aster lipian1004@163.com
 * @since 2024-04-15 14:28:44
 */
public interface WfFormService extends IService<WfForm> {

    /**
     * 分页
     *
     * @param query 查询条件
     * @return 查询结果
     */
    PageInfo<WfFormVO> pageList(WfFormQuery query);

    /**
     * 查询表单集合
     *
     * @param query 查询条件
     * @return 表单集合
     */
    List<WfFormVO> list(WfFormQuery query);

    /**
     * 保存
     *
     * @param vo 流程表单
     */
    void save(WfFormVO vo);

    /**
     * 处理列信息
     *
     * @param entity   当前表单实体
     * @param wfFormVO 最新表单VO
     */
    void handleField(WfForm entity, WfFormVO wfFormVO);

    /**
     * 查询最大版本号
     *
     * @param code 表单编码
     * @return 最大版本号
     */
    Integer selectMaxVersion(String code);

    /**
     * 流程表单删除
     *
     * @param idList 主键集合
     * @return 删除结果
     */
    boolean wfFormDelete(List<String> idList);

    /**
     * 获取最后一个版本的表单
     *
     * @param code code
     * @return 最后一个版本的表单
     */
    WfFormVO getLastByFormCode(String code);

    /**
     * 通过主键查询表单项
     *
     * @param id 主键
     * @return 表单项
     */
    List<FormItem> getFormItemsById(String id);

    /**
     * 通过表单编码查询最新版本的表单信息
     * @param code 表单编码
     * @return 最新版本的表单信息
     */
    WfForm getLastFormInfo(String code);
}
